import sqlite3
import os

def fix_database():
    """直接修复数据库中的sessions表"""
    # 数据库文件路径
    db_file = os.path.join(os.path.dirname(__file__), 'database.db')
    
    print(f"数据库文件路径: {db_file}")
    
    # 检查数据库文件是否存在
    if not os.path.exists(db_file):
        print("数据库文件不存在，将创建新的数据库文件")
        # 创建空的数据库文件
        conn = sqlite3.connect(db_file)
        conn.close()
    
    # 连接到数据库
    conn = sqlite3.connect(db_file)
    cursor = conn.cursor()
    
    try:
        # 检查sessions表是否存在
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='sessions'")
        table_exists = cursor.fetchone()
        
        if not table_exists:
            print("sessions表不存在，创建新表...")
            # 创建sessions表（包含所有必要的列）
            create_table_sql = """
            CREATE TABLE sessions (
                id VARCHAR(36) PRIMARY KEY,
                name VARCHAR(100) NOT NULL DEFAULT '默认会话',
                user_id VARCHAR(36),
                status VARCHAR(20) NOT NULL DEFAULT 'active',
                category VARCHAR(20) NOT NULL DEFAULT 'default',
                interaction_count INTEGER NOT NULL DEFAULT 0,
                research_count INTEGER NOT NULL DEFAULT 0,
                session_metadata TEXT,
                created_at TIMESTAMP NOT NULL,
                updated_at TIMESTAMP NOT NULL,
                closed_at TIMESTAMP,
                search_vector VARCHAR(1000)
            )
            """
            cursor.execute(create_table_sql)
            print("成功创建sessions表")
        else:
            print("sessions表已存在，检查是否需要添加category列...")
            # 检查category列是否存在
            cursor.execute("PRAGMA table_info(sessions)")
            columns = cursor.fetchall()
            column_names = [column[1] for column in columns]
            
            print(f"现有列: {column_names}")
            
            if 'category' not in column_names:
                print("添加category列...")
                # 添加category列
                cursor.execute("ALTER TABLE sessions ADD COLUMN category VARCHAR(20) DEFAULT 'default'")
                print("成功添加category列")
            else:
                print("category列已存在，无需添加")
        
        # 提交更改
        conn.commit()
        print("数据库修复完成")
        
    except Exception as e:
        print(f"修复数据库时出错: {e}")
        conn.rollback()
    finally:
        conn.close()

if __name__ == "__main__":
    fix_database()